home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / asmexam.arc / DUMP.LST < prev    next >
File List  |  1984-09-03  |  22KB  |  459 lines

  1.  The Microsoft MACRO Assembler             09-03-84        PAGE    1-1
  2. DUMP --- Display File Contents
  3.  
  4.  
  5. 1                        name    dump
  6. 2                        page    55,132
  7. 3                        title   DUMP --- Display File Contents
  8. 4                        
  9. 5                        ;DUMP --- a utility to display the contents of a file in hex
  10. 6                        ;and ASCII format. Requires PC-DOS or MS-DOS 2.0.
  11. 7                        
  12. 8                        ;Used in the form:
  13. 9                        ;A>dump path\filename.ext [>device]
  14. 10                        ;(item in square brackets is optional)
  15. 11                        
  16. 12     = 000D                   cr              equ  0dh                   ;ASCII carriage return
  17. 13     = 000A                   lf              equ  0ah                   ;ASCII line feed
  18. 14     = 0020                   blank           equ  20h                   ;ASCII space code
  19. 15                        
  20. 16     = 0080                   command         equ  80h                   ;buffer for command tail
  21. 17                        
  22. 18     = 0080                   blksize         equ  128                   ;size of input file records
  23. 19                        
  24. 20     = 0001                   output_handle   equ  1                     ;handle of standard output de
  25. 21                                                                   ;(can be redirected)
  26. 22     = 0002                   error_handle    equ  2                     ;handle of standard error dev
  27. 23                                                                   ;(not redirectable)
  28. 24                        
  29. 25     0000                   cseg            segment para public 'CODE'
  30. 26                        
  31. 27                                        assume cs:cseg,ds:data,es:data,ss:stack
  32. 28                        
  33. 29     0000                   dump            proc far                   ;entry point from PC-DOS
  34. 30                        
  35. 31     0000  1E                              push ds                    ;save DS:0000 for final
  36. 32     0001  33 C0                              xor  ax,ax                 ;return to PC-DOS
  37. 33     0003  50                              push ax
  38. 34     0004  B8  ---- R                         mov  ax,data               ;make our data segment
  39. 35     0007  8E C0                              mov  es,ax                 ;addressable via ES register.
  40. 36     0009  B4 30                              mov  ah,30h                ;check version of PC-DOS.
  41. 37     000B  CD 21                              int  21h
  42. 38     000D  3C 02                              cmp  al,2
  43. 39     000F  73 0C                              jae  dump1                 ;proceed, DOS 2.0 or greater.
  44. 40     0011  BA 017E R                         mov  dx,offset msg3        ;DOS 1.x --- print error mess
  45. 41     0014  8C C0                              mov  ax,es                 ;we must use the old PC-DOS
  46. 42     0016  8E D8                              mov  ds,ax                 ;string output function since
  47. 43     0018  B4 09                              mov  ah,9                  ;handles are not available in
  48. 44     001A  CD 21                              int  21h                   ;this version of PC-DOS.
  49. 45     001C  CB                              ret
  50. 46     001D  E8 00A8 R         dump1:          call get_filename          ;get path and file spec.for
  51. 47                                                                   ;input file from command line
  52. 48     0020  8C C0                              mov  ax,es                 ;set DS = ES for remainder
  53. 49     0022  8E D8                              mov  ds,ax                 ;of program.
  54. 50     0024  73 0A                              jnc  dump2                 ;jump,got acceptable name.
  55.  The Microsoft MACRO Assembler             09-03-84        PAGE    1-2
  56. DUMP --- Display File Contents
  57.  
  58.  
  59. 51     0026  BA 016B R                         mov  dx,offset msg2        ;missing or illegal filespec.
  60. 52     0029  B9 0013 90                         mov  cx,msg2_length
  61. 53     002D  EB 75 90                              jmp  dump9                 ;print error message and exit
  62. 54                        
  63. 55                        
  64. 56     0030  E8 00CB R         dump2:          call open_input            ;now try to open input file
  65. 57     0033  73 0A                              jnc  dump3                 ;jump, opened input ok
  66. 58     0035  BA 0159 R                         mov  dx,offset msg1        ;open of input file failed.
  67. 59     0038  B9 0012 90                         mov  cx,msg1_length
  68. 60     003C  EB 66 90                              jmp  dump9                 ;print error msg and exit.
  69. 61                        
  70. 62     003F  E8 0101 R         dump3:          call read_block            ;initialize input file buffer
  71. 63     0042  73 0A                              jnc  dump4                 ;jump,got a block
  72. 64     0044  BA 019B R                         mov  dx,offset msg4        ;empty file, print error
  73. 65     0047  B9 000E 90                         mov  cx,msg4_length
  74. 66     004B  EB 57 90                              jmp  dump9                 ;message and exit
  75. 67                        
  76. 68                        
  77. 69                                                                   ;file successfully opened.
  78. 70     004E                   dump4:                                     ;now convert and display it!
  79. 71     004E  E8 00E1 R                         call get_char              ;read 1 character from input.
  80. 72     0051  72 4D                              jc   dump8                 ;jump,end of file
  81. 73     0053  FF 06 0044 R                         inc  input_addr            ;update relative file positio
  82. 74                        
  83. 75     0057  0B DB                              or   bx,bx                 ;is this 1st char of block?
  84. 76     0059  75 03                              jnz  dump5                 ;no
  85. 77     005B  E8 012F R                         call print_heading
  86. 78                        
  87. 79     005E  81 E3 000F         dump5:          and  bx,0fh                ;is this first byte of 16?
  88. 80     0062  75 0B                              jnz  dump6                 ;no, jump
  89. 81     0064  50                              push ax                    ;save the byte
  90. 82     0065  BF 0048 R                         mov  di,offset output      ;convert relative file addr.
  91. 83     0068  A1 0044 R                         mov  ax,input_addr         ;for output string
  92. 84     006B  E8 0147 R                         call conv_word
  93. 85     006E  58                              pop  ax
  94. 86     006F                   dump6:                                     ;store ASCII version of chara
  95. 87                                                                   ;if it is alphanumeric,
  96. 88     006F  BF 007F R                         mov  di,offset outputb
  97. 89     0072  03 FB                              add  di,bx                 ;calculate output string addr
  98. 90     0074  C6 05 2E                              mov  byte ptr[di],'.'      ;if it is control character,
  99. 91     0077  3C 20                              cmp  al,blank              ;just print a dot.
  100. 92     0079  72 06                              jb   dump7                 ;jump,not alphanumeric,
  101. 93     007B  3C 7E                              cmp  al,7eh
  102. 94     007D  77 02                              ja   dump7                 ;jump not alphanumberic,
  103. 95     007F  88 05                              mov  [di],al               ;store ASCII character.
  104. 96     0081                   dump7:
  105. 97     0081  53                              push bx                    ; save current offset
  106. 98     0082  BF 004E R                         mov  di,offset outputa     ; offset of hex area
  107. 99     0085  03 FB                              add  di,bx                 ; + 3*bx is where next
  108. 100     0087  03 FB                              add  di,bx                 ; pair of hex digits go
  109.  The Microsoft MACRO Assembler             09-03-84        PAGE    1-3
  110. DUMP --- Display File Contents
  111.  
  112.  
  113. 101     0089  03 FB                              add  di,bx
  114. 102     008B  E8 0152 R                         call conv_byte             ;value => printable hex digits
  115. 103     008E  5B                              pop  bx                    ;restore offset value
  116. 104     008F  83 FB 0F                              cmp  bx,0fh                ;16 bytes converted?
  117. 105     0092  75 BA                              jne  dump4                 ; no go back and do another
  118. 106     0094  BA 0048 R                         mov dx,offset output       ;
  119. 107     0097  B9 0049 90                         mov  cx,output_length
  120. 108     009B  E8 011F R                         call write_std
  121. 109     009E  EB AE                              jmp  dump4
  122. 110                        
  123. 111     00A0                   dump8:
  124. 112     00A0  E8 00D8 R                         call close_input
  125. 113     00A3  CB                              ret
  126. 114                        
  127. 115     00A4                   dump9:
  128. 116     00A4  E8 0127 R                         call write_error
  129. 117     00A7  CB                              ret
  130. 118                        
  131. 119     00A8                   dump            endp
  132. 120                        
  133. 121                        
  134. 122     00A8                   get_filename    proc near
  135. 123     00A8  BE 0080                              mov si,offset command
  136. 124     00AB  BF 0000 R                         mov di,offset input_name
  137. 125     00AE  FC                              cld
  138. 126     00AF  AC                              lodsb
  139. 127     00B0  0A C0                              or al,al
  140. 128     00B2  74 15                              jz get_filename4
  141. 129                        
  142. 130     00B4                   get_filename1:
  143. 131     00B4  AC                              lodsb
  144. 132     00B5  3C 0D                              cmp  al,cr
  145. 133     00B7  74 10                              je   get_filename4
  146. 134     00B9  3C 20                              cmp  al,blank
  147. 135     00BB  74 F7                              jz   get_filename1
  148. 136                        
  149. 137     00BD                   get_filename2:
  150. 138     00BD  AA                              stosb
  151. 139     00BE  AC                              lodsb
  152. 140     00BF  3C 0D                              cmp  al,cr
  153. 141     00C1  74 04                              je   get_filename3
  154. 142     00C3  3C 20                              cmp  al,blank
  155. 143     00C5  75 F6                              jne  get_filename2
  156. 144                        
  157. 145     00C7                   get_filename3:
  158. 146     00C7  F8                              clc
  159. 147     00C8  C3                              ret
  160. 148                        
  161. 149     00C9                   get_filename4:
  162. 150     00C9  F9                              stc
  163.  The Microsoft MACRO Assembler             09-03-84        PAGE    1-4
  164. DUMP --- Display File Contents
  165.  
  166.  
  167. 151     00CA  C3                              ret
  168. 152                        
  169. 153     00CB                   get_filename     endp
  170. 154                        
  171. 155     00CB                   open_input      proc  near
  172. 156     00CB  BA 0000 R                         mov  dx,offset input_name ; ds:dx => addr filename
  173. 157     00CE  B0 00                              mov  al,0
  174. 158     00D0  B4 3D                              mov  ah,3dh   ; open file function in DOS
  175. 159     00D2  CD 21                              int  21h
  176. 160     00D4  A3 0040 R                         mov  input_handle,ax
  177. 161     00D7  C3                              ret
  178. 162     00D8                   open_input      endp
  179. 163                        
  180. 164     00D8                   close_input     proc  near
  181. 165     00D8  8B 1E 0040 R                         mov  bx,input_handle
  182. 166     00DC  B4 3E                              mov  ah,3eh   ;    DOS closefile function number
  183. 167     00DE  CD 21                              int  21h
  184. 168     00E0  C3                              ret
  185. 169     00E1                   close_input     endp
  186. 170                        
  187. 171     00E1                   get_char        proc  near
  188. 172     00E1  8B 1E 0042 R                         mov  bx,input_ptr
  189. 173     00E5  81 FB 0080                         cmp  bx,blksize       ; is this the end of a block?
  190. 174     00E9  75 0C                              jne  get_char1
  191. 175     00EB  C7 06 0042 R 0000                    mov  input_ptr,0      ; if eob then set pointer to 0
  192. 176     00F1  E8 0101 R                         call read_block       ; and get another block
  193. 177     00F4  73 EB                              jnc  get_char
  194. 178     00F6  C3                              ret
  195. 179                        
  196. 180     00F7  8A 87 00D9 R         get_char1:      mov  al,[input_buffer+bx]
  197. 181     00FB  FF 06 0042 R                         inc  input_ptr
  198. 182     00FF  F8                              clc                        ; set carry 0 since not eof
  199. 183     0100  C3                              ret
  200. 184                        
  201. 185     0101                    get_char        endp
  202. 186                        
  203. 187     0101                    read_block      proc  near
  204. 188                        
  205. 189     0101  8B 1E 0040 R                         mov  bx,input_handle
  206. 190     0105  B9 0080                              mov  cx,blksize
  207. 191     0108  BA 00D9 R                         mov  dx,offset input_buffer
  208. 192     010B  B4 3F                              mov  ah,3fh                   ; dos read disk function
  209. 193     010D  CD 21                              int 21h
  210. 194     010F  FF 06 0046 R                         inc  input_block
  211. 195     0113  C7 06 0042 R 0000                    mov  input_ptr,0
  212. 196     0119  0B C0                              or ax,ax                  ;ax contains # of bytes read
  213. 197     011B  75 01                              jnz  read_block1          ; if not eof ret (carry is 0)
  214. 198     011D  F9                              stc                       ; else set carry and ret
  215. 199                        
  216. 200     011E                    read_block1:
  217.  The Microsoft MACRO Assembler             09-03-84        PAGE    1-5
  218. DUMP --- Display File Contents
  219.  
  220.  
  221. 201     011E  C3                              ret
  222. 202                        
  223. 203     011F                    read_block      endp
  224. 204                        
  225. 205     011F                    write_std      proc  near
  226. 206                        
  227. 207     011F  BB 0001                              mov  bx,output_handle
  228. 208     0122  B4 40                              mov  ah,40h   ; write device function number
  229. 209     0124  CD 21                              int 21h
  230. 210     0126  C3                              ret
  231. 211                        
  232. 212     0127                    write_std       endp
  233. 213                        
  234. 214     0127                    write_error    proc  near
  235. 215                        
  236. 216     0127  BB 0002                              mov  bx,error_handle
  237. 217     012A  B4 40                              mov  ah,40h
  238. 218     012C  CD 21                              int 21h
  239. 219     012E  C3                              ret
  240. 220                        
  241. 221     012F                    write_error    endp
  242. 222                        
  243. 223     012F                    print_heading   proc  near
  244. 224     012F  50                              push ax
  245. 225     0130  53                              push bx
  246. 226     0131  BF 009A R                         mov  di,offset headinga
  247. 227     0134  A1 0046 R                         mov  ax,input_block
  248. 228     0137  E8 0147 R                         call conv_word
  249. 229     013A  BA 0091 R                         mov  dx,offset heading
  250. 230     013D  B9 0048 90                         mov  cx,heading_length
  251. 231     0141  E8 011F R                         call write_std
  252. 232     0144  5B                              pop  bx
  253. 233     0145  58                              pop  ax
  254. 234     0146  C3                              ret
  255. 235                        
  256. 236     0147                    print_heading   endp
  257. 237                        
  258. 238     0147                    conv_word       proc  near
  259. 239     0147  50                              push ax
  260. 240     0148  8A C4                              mov  al,ah
  261. 241     014A  E8 0152 R                         call conv_byte
  262. 242     014D  58                              pop ax
  263. 243     014E  E8 0152 R                         call conv_byte
  264. 244     0151  C3                              ret
  265. 245                        
  266. 246     0152                    conv_word       endp
  267. 247                        
  268. 248     0152                    conv_byte       proc  near
  269. 249                        
  270. 250     0152  2A E4                              sub   ah,ah  ; zero ah reg
  271.  The Microsoft MACRO Assembler             09-03-84        PAGE    1-6
  272. DUMP --- Display File Contents
  273.  
  274.  
  275. 251     0154  B1 10                              mov   cl,16
  276. 252     0156  F6 F1                              div   cl
  277. 253     0158  E8 0163 R                         call  ascii
  278. 254     015B  AA                              stosb
  279. 255     015C  8A C4                              mov   al,ah
  280. 256     015E  E8 0163 R                         call  ascii
  281. 257     0161  AA                              stosb
  282. 258     0162  C3                              ret
  283. 259                        
  284. 260     0163                    conv_byte       endp
  285. 261                        
  286. 262     0163                    ascii           proc  near
  287. 263     0163  04 30                              add   al,'0'    ; convert al to ascii char
  288. 264     0165  3C 39                              cmp   al,'9'
  289. 265     0167  7E 02                              jle   ascii2
  290. 266     0169  04 27                              add   al,'a'-'9'-1   ; offset to a-f hex range
  291. 267                        
  292. 268     016B  C3              ascii2: ret
  293. 269     016C                   ascii   endp
  294. 270     016C                   cseg    ends
  295. 271                        
  296. 272     0000                   data    segment para public'DATA'
  297. 273                        
  298. 274     0000     40 [              input_name      db  64 dup(0)     ; buffer for input filespec
  299. 275                    00         
  300. 276                        ]         
  301. 277                        
  302. 278     0040  0000              input_handle    dw  0             ;token from DOS for input file
  303. 279     0042  0000              input_ptr       dw  0             ;pointer to input de-blocking buffer
  304. 280     0044  0000              input_addr      dw  0             ; relatve address in file
  305. 281                        
  306. 282     0046  0000              input_block     dw  0            ;current 128k block byte number
  307. 283     0048  6E 6E 6E 6E 20 20    output          db  'nnnn',blank,blank
  308. 284     004E     10 [              outputa         db  16 dup('00',blank)
  309. 285                   30 30         
  310. 286                    20         
  311. 287                        ]         
  312. 288                        
  313. 289     007E  20                               db  blank
  314. 290                        
  315. 291     007F  30 31 32 33 34 35    outputb         db  '0123456789abcdef',cr,lf
  316. 292           36 37 38 39 61 62    
  317. 293           63 64 65 66 0D 0A    
  318. 294     = 0049                   output_length  equ $-output
  319. 295     0091  0D 0A 52 65 63 6F    heading        db  cr,lf,'Record',blank
  320. 296           72 64 20              
  321. 297     009A  6E 6E 6E 6E 20 20    headinga       db  'nnnn',blank,blank,cr,lf
  322. 298           0D 0A              
  323. 299     00A2     07 [                             db  7 dup(blank)
  324. 300                    20         
  325.  The Microsoft MACRO Assembler             09-03-84        PAGE    1-7
  326. DUMP --- Display File Contents
  327.  
  328.  
  329. 301                        ]         
  330. 302                        
  331. 303     00A9  30 20 20 31 20 20                   db '0  1  2  3  4  5  6  7  '
  332. 304           32 20 20 33 20 20    
  333. 305           34 20 20 35 20 20    
  334. 306           36 20 20 37 20 20    
  335. 307     00C1  38 20 20 39 20 20                   db '8  9  A  B  C  D  E  F',cr,lf
  336. 308           41 20 20 42 20 20    
  337. 309           43 20 20 44 20 20    
  338. 310           45 20 20 46 0D 0A    
  339. 311     = 0048                   heading_length  equ $-heading
  340. 312     00D9     80 [              input_buffer    db  blksize dup(?)
  341. 313                    ??         
  342. 314                        ]         
  343. 315                        
  344. 316     0159  0D 0A              msg1            db  cr,lf
  345. 317     015B  43 61 6E 6E 6F 74                    db 'Cannot open file'
  346. 318           20 6F 70 65 6E 20    
  347. 319           66 69 6C 65         
  348. 320     = 0012                   msg1_length     equ $-msg1
  349. 321                        
  350. 322     016B  0D 0A              msg2            db  cr,lf
  351. 323     016D  4D 69 73 73 69 6E                     db 'Missing file name'
  352. 324           67 20 66 69 6C 65    
  353. 325           20 6E 61 6D 65         
  354. 326     = 0013                   msg2_length     equ $-msg2
  355. 327     017E  0D 0A              msg3            db  cr,lf
  356. 328     0180  52 65 71 75 69 72                    db 'Requires DOS 2.0 or greater'
  357. 329           65 73 20 44 4F 53    
  358. 330           20 32 2E 30 20 6F    
  359. 331           72 20 67 72 65 61    
  360. 332           74 65 72              
  361. 333     = 001D                   msg3_length     equ $-msg3
  362. 334                        
  363. 335     019B  0D 0A              msg4            db  cr,lf
  364. 336     019D  45 6D 70 74 79 20                    db 'Empty file',cr,lf
  365. 337           66 69 6C 65 0D 0A    
  366. 338     = 000E                   msg4_length     equ $-msg4
  367. 339                        
  368. 340     01A9                   data            ends
  369. 341                        
  370. 342     0000                   stack           segment para stack'STACK'
  371. 343     0000     40 [                              db 64 dup(?)
  372. 344                    ??         
  373. 345                        ]         
  374. 346                        
  375. 347                        
  376. 348     0040                   stack           ends
  377. 349                                        end dump
  378.  
  379.  The Microsoft MACRO Assembler             09-03-84        PAGE    Symbols-1
  380. DUMP --- Display File Contents
  381.  
  382.  
  383. Segments and groups:
  384.  
  385.          N a m e              Size    align    combine    class
  386.  
  387. CSEG . . . . . . . . . . . . . .    016C    PARA      PUBLIC    'CODE'
  388. DATA . . . . . . . . . . . . . .    01A9    PARA      PUBLIC    'DATA'
  389. STACK. . . . . . . . . . . . . .    0040    PARA      STACK     'STACK'
  390.  
  391. Symbols:            
  392.  
  393.          N a m e              Type    Value    Attr         
  394.  
  395. ASCII. . . . . . . . . . . . . .    N PROC    0163    CSEG    Length =0009
  396. ASCII2 . . . . . . . . . . . . .    L NEAR     016B    CSEG
  397. BLANK. . . . . . . . . . . . . .    Number    0020    
  398. BLKSIZE. . . . . . . . . . . . .    Number    0080    
  399. CLOSE_INPUT. . . . . . . . . . .    N PROC    00D8    CSEG    Length =0009
  400. COMMAND. . . . . . . . . . . . .    Number    0080    
  401. CONV_BYTE. . . . . . . . . . . .    N PROC    0152    CSEG    Length =0011
  402. CONV_WORD. . . . . . . . . . . .    N PROC    0147    CSEG    Length =000B
  403. CR . . . . . . . . . . . . . . .    Number    000D    
  404. DUMP . . . . . . . . . . . . . .    F PROC    0000    CSEG    Length =00A8
  405. DUMP1. . . . . . . . . . . . . .    L NEAR     001D    CSEG
  406. DUMP2. . . . . . . . . . . . . .    L NEAR     0030    CSEG
  407. DUMP3. . . . . . . . . . . . . .    L NEAR     003F    CSEG
  408. DUMP4. . . . . . . . . . . . . .    L NEAR     004E    CSEG
  409. DUMP5. . . . . . . . . . . . . .    L NEAR     005E    CSEG
  410. DUMP6. . . . . . . . . . . . . .    L NEAR     006F    CSEG
  411. DUMP7. . . . . . . . . . . . . .    L NEAR     0081    CSEG
  412. DUMP8. . . . . . . . . . . . . .    L NEAR     00A0    CSEG
  413. DUMP9. . . . . . . . . . . . . .    L NEAR     00A4    CSEG
  414. ERROR_HANDLE . . . . . . . . . .    Number    0002    
  415. GET_CHAR . . . . . . . . . . . .    N PROC    00E1    CSEG    Length =0020
  416. GET_CHAR1. . . . . . . . . . . .    L NEAR     00F7    CSEG
  417. GET_FILENAME . . . . . . . . . .    N PROC    00A8    CSEG    Length =0023
  418. GET_FILENAME1. . . . . . . . . .    L NEAR     00B4    CSEG
  419. GET_FILENAME2. . . . . . . . . .    L NEAR     00BD    CSEG
  420. GET_FILENAME3. . . . . . . . . .    L NEAR     00C7    CSEG
  421. GET_FILENAME4. . . . . . . . . .    L NEAR     00C9    CSEG
  422. HEADING. . . . . . . . . . . . .    L BYTE     0091    DATA
  423. HEADINGA . . . . . . . . . . . .    L BYTE     009A    DATA
  424. HEADING_LENGTH . . . . . . . . .    Number    0048    
  425. INPUT_ADDR . . . . . . . . . . .    L WORD     0044    DATA
  426. INPUT_BLOCK. . . . . . . . . . .    L WORD     0046    DATA
  427. INPUT_BUFFER . . . . . . . . . .    L BYTE     00D9    DATA    Length =0080
  428. INPUT_HANDLE . . . . . . . . . .    L WORD     0040    DATA
  429. INPUT_NAME . . . . . . . . . . .    L BYTE     0000    DATA    Length =0040
  430. INPUT_PTR. . . . . . . . . . . .    L WORD     0042    DATA
  431. LF . . . . . . . . . . . . . . .    Number    000A    
  432. MSG1 . . . . . . . . . . . . . .    L BYTE     0159    DATA
  433.  The Microsoft MACRO Assembler             09-03-84        PAGE    Symbols-2
  434. DUMP --- Display File Contents
  435.  
  436.  
  437. MSG1_LENGTH. . . . . . . . . . .    Number    0012    
  438. MSG2 . . . . . . . . . . . . . .    L BYTE     016B    DATA
  439. MSG2_LENGTH. . . . . . . . . . .    Number    0013    
  440. MSG3 . . . . . . . . . . . . . .    L BYTE     017E    DATA
  441. MSG3_LENGTH. . . . . . . . . . .    Number    001D    
  442. MSG4 . . . . . . . . . . . . . .    L BYTE     019B    DATA
  443. MSG4_LENGTH. . . . . . . . . . .    Number    000E    
  444. OPEN_INPUT . . . . . . . . . . .    N PROC    00CB    CSEG    Length =000D
  445. OUTPUT . . . . . . . . . . . . .    L BYTE     0048    DATA
  446. OUTPUTA. . . . . . . . . . . . .    L BYTE     004E    DATA    Length =0010
  447. OUTPUTB. . . . . . . . . . . . .    L BYTE     007F    DATA
  448. OUTPUT_HANDLE. . . . . . . . . .    Number    0001    
  449. OUTPUT_LENGTH. . . . . . . . . .    Number    0049    
  450. PRINT_HEADING. . . . . . . . . .    N PROC    012F    CSEG    Length =0018
  451. READ_BLOCK . . . . . . . . . . .    N PROC    0101    CSEG    Length =001E
  452. READ_BLOCK1. . . . . . . . . . .    L NEAR     011E    CSEG
  453. WRITE_ERROR. . . . . . . . . . .    N PROC    0127    CSEG    Length =0008
  454. WRITE_STD. . . . . . . . . . . .    N PROC    011F    CSEG    Length =0008
  455.  
  456. Warning Severe
  457. Errors    Errors 
  458. 0    0
  459.